import 'dart:collection';

///数据类型

///1、num
int a = 1;
double b = 1.12;
// String -> int
int one = int.parse('1');
// String -> double
var onePointOne = double.parse('1.1');
// 输出3.1
// print(onePointOne + 2);
// int -> String
String oneAsString = 1.toString();
// double -> String 注意括号中要有小数点位数，否则报错
String piAsString = 3.14159.toStringAsFixed(2);
// 截取两位小数, 输出3.14
String aString = 1.12618.toStringAsFixed(2);
// 检查是否四舍五入，输出1.13，发现会做四舍五入

///2、String
// Dart里面的String是一系列 UTF-16 代码单元。
// 您可以使用单引号或双引号来创建一个字符串。

String singleString = 'aaa';
String doubleString = "bbb";
// 单引号嵌套双引号
String sdString = '$singleString a "bbb" ${doubleString}';
// 输出 aaa a "bbb" bbb
// 双引号嵌套单引号
String dsString =
    "${singleString.toUpperCase()} abc 'aaa' $doubleString.toUpperCase()";
// 输出 AAA abc 'aaa' bbb.toUpperCase(),
//可以看出 ”$doubleString.toUpperCase()“ 没有加“{}“，导致输出结果是”bbb.toUpperCase()“

///3、bool
// Dart 是强 bool 类型检查，只有bool 类型的值是true 才被认为是true。
// 检查是否为空字符串
var fullName = '';
// 检查0
var hitPoints = 0;
// 检查是否为null
var unicorn;
// 检查是否为NaN
var iMeantToDoThis = 0 / 0;

void main() {
  assert(fullName.isEmpty);
  assert(hitPoints <= 0);
  assert(unicorn == null);
  assert(iMeantToDoThis.isNaN);
}

///4、List集合
//数组是List对象，因此大多数人只是将它们称为List。
//创建一个int类型的list
List list = [10, 7, 23];
// 输出[10, 7, 23]

// 使用List的构造函数，也可以添加int参数，表示List固定长度，不能进行添加 删除操作
//list的操作
void listData() {
  var fruits = [];
  // 获取List的长度
  print(fruits.length);

// 获取第一个元素
  print(fruits.first);

// 获取元素最后一个元素
  print(fruits.last);

// 利用索引获取元素
  print(fruits[0]);

// 查找某个元素的索引号
  print(fruits.indexOf('apples'));

// 删除指定位置的元素，返回删除的元素
  print(fruits.removeAt(0));

// 删除指定元素,成功返回true，失败返回false
// 如果集合里面有多个“apples”, 只会删除集合中第一个改元素
  fruits.remove('apples');

// 删除最后一个元素，返回删除的元素
  fruits.removeLast();

// 删除指定条件的元素(这里是元素长度大于6)
  fruits.removeWhere((item) => item.length > 6);
// 删除所有的元素
  fruits.clear();

  fruits.forEach((element) {
    print(element);
  });
  fruits.forEach((item) => print('${list.indexOf(item)}: $item'));
}

///5、Map集合
// Map方式一：
Map companys = {'Alibaba': '阿里巴巴', 'Tencent': '腾讯', 'baidu': '百度'};
// 输出：{Alibaba: 阿里巴巴, Tencent: 腾讯, baidu: 百度}
/// Map方式二：先声明，再去赋值。
void printMap() {
  Map schoolsMap = new Map();
  schoolsMap['first'] = '清华';
  schoolsMap['second'] = '北大';
  schoolsMap['third'] = '复旦';
  schoolsMap.remove('first');
// 打印结果 {first: 清华, second: 北大, third: 复旦}
  print(schoolsMap);
  var fruits = new HashMap();
  fruits["first"] = "apple";
  fruits["second"] = "banana";
  fruits["fifth"] = "orange";
//换成双引号,换成var 打印结果 {first: apple, second: banana, fifth: orange}
  print(fruits);
  schoolsMap.forEach((key, value) {

  });


  Map<String, dynamic> map = {};
  map.putIfAbsent("key", () => null); //
}
